<?php
namespace Org\Oa;
use Think\Controller;
use Home\Controller\PublicController;
class msg extends Controller{
	/**
	 * 发送短信验证码
	 */
	public static function send_msg($phone,$content=null){
		$a = self::send_msg_time($phone);
		if($a){
			$code = rand(1111, 9999);
			//$code = "1234";
			$db = M('phone_code');
			$data['phone'] =  $phone;
			$res = $db->where($data)->find();
			if(!empty($res)){
				$data['id'] = $res['id'];
				$data['is_use'] = 0;
				$data['code'] = $code;
				$data['add_time'] = time();
				$rs = $db->save($data);
			}else{
				$data['code'] = $code;
				$data['is_use'] = 0;
				$data['add_time'] = time();
				$rs = $db->add($data);
			}
			if($rs!=false){
				if(!empty($content)){
					$content = str_replace("【变量】",$code, $content);
				}
				$b = self::sendmessage($phone, $code,$content);
				if($b == 2){
					return true;
				}else{
					//return false;
					return false;
				}
			}else{
				return false;
			}
		}else{
			return false;
		}
		
	}
	/**
	 * 验证短信的发送时间
	 */
	public static function send_msg_time($phone){
		$db = M('phone_code');
		$re = $db->where(array('phone'=>$phone))->find();
		if(!empty($re)){
			$time = time()-$re['add_time'];
			if($time<(120)){
				return false;
			}else{
				return true;
			}
		}else{
			return true;
		}
	}
	/**
	 * 验证短信验证码
	 */
	public static function check_phone_code($phone,$code){
		$db = M('phone_code');
		$re = $db->where("phone='$phone' and code='$code' and is_use='0'")->find();
		if(empty($re)){
			return false;
		}else{
			$time = time()-$re['add_time'];
			if($time>=6000){
				return false;
			}else{
				return true;
			}
		}
	}
	/**
	 * 发送验证码
	 */
	public static function sendmessage($phone,$code=null,$content=null){
		if(empty($content)){
			$content= "尊敬的用户，您的手机号码正在尝试注册初品网，验证码是".$code."，有效时间为10分钟。温馨提示：如非本人操作，请忽略此信息。";
		}
		$target = "http://106.ihuyi.cn/webservice/sms.php?method=Submit";
		$post_data = array(
			'account'=>'cf_chupin',
			'password'=>'CFD352',
			'mobile'=>$phone,
			'content' => $content,
 		);
		$gets = self::xml_to_array(self::Post($post_data, $target));;
		return $gets['SubmitResult']['code'];
	}
	public static  function msg_status($status){
		switch ($status){
			case 0:
				$msg = "发送成功";
			break;
			case 1:
				$msg = '请求参数缺失';
			break;
			case 2:
				$msg = '请求参数格式错误';
			break;
			case 3:
				$msg = '账户余额不足';
			break;
			case 4:
				$msg = '关键词屏蔽';
			break;
			case 5:
				$msg = '未找到对应id的模板';
			break;
			case 6:
				$msg = '添加模板失败';
			break;
			case 7:
				$msg = '模板不可用';
			break;
			case 8:
				$msg = '同一手机号30秒内重复提交相同的内容	请检查是否同一手机号在30秒内重复提交相同的内容';
			break;
			case 9:
				$msg = '同一手机号5分钟内重复提交相同的内容超过3次'; 
			break;
			case 10 :
				$msg = '手机号黑名单过滤';  
			break;
			case 11:
				$msg = '接口不支持GET方式调用';
			
			break;
			case 12:
				$msg = '接口不支持POST方式调用';
			break;
			case 15:
				$msg ='签名不匹配';
			break;
			case 15:
				$msg='签名格式不正确	短信内容不能包含多个签名【 】符号';
			break;
			case 16:
				$msg = '24小时内同一手机号发送次数超过限制	请检查程序是否有异常或者系统是否被恶意攻击';
			break;
			case 22:
				$msg ='1小时内同一手机号发送次数超过限制';
			break;
			default:
				$msg = '未知异常';
			break;
		}
		return $msg;
		/* 0	OK	调用成功，该值为null	无需处理
		1	请求参数缺失	补充必须传入的参数	开发者
		2	请求参数格式错误	按提示修改参数值的格式	开发者
		3	账户余额不足	账户需要充值，请充值后重试	开发者
		4	关键词屏蔽	关键词屏蔽，修改关键词后重试	开发者
		5	未找到对应id的模板	模板id不存在或者已经删除	开发者
		6	添加模板失败	模板有一定的规范，按失败提示修改	开发者
		7	模板不可用	审核状态的模板和审核未通过的模板不可用	开发者
		8	同一手机号30秒内重复提交相同的内容	请检查是否同一手机号在30秒内重复提交相同的内容	开发者
		9	同一手机号5分钟内重复提交相同的内容超过3次	为避免重复发送骚扰用户，同一手机号5分钟内相同内容最多允许发3次	开发者
		10	手机号黑名单过滤	手机号在黑名单列表中（你可以把不想发送的手机号添加到黑名单列表）	开发者
		11	接口不支持GET方式调用	接口不支持GET方式调用，请按提示或者文档说明的方法调用，一般为POST	开发者
		12	接口不支持POST方式调用	接口不支持POST方式调用，请按提示或者文档说明的方法调用，一般为GET	开发者
		13	营销短信暂停发送	由于运营商管制，营销短信暂时不能发送	开发者
		14	解码失败	请确认内容编码是否设置正确	开发者
		15	签名不匹配	短信签名与预设的固定签名不匹配	开发者
		16	签名格式不正确	短信内容不能包含多个签名【 】符号	开发者
		17	24小时内同一手机号发送次数超过限制	请检查程序是否有异常或者系统是否被恶意攻击	开发者
		18	签名校验失败	签名校验失败	开发者
		19	请求已失效	请求已失效	开发者
		20	不支持的国家地区	不支持的国家地区	开发者
		21	解密失败	解密失败	开发者
		22	1小时内同一手机号发送次数超过限制	1小时内同一手机号发送次数超过限制	开发者
		23	发往模板支持的国家列表之外的地区	发往模板支持的国家列表之外的地区	开发者
		24	添加告警设置失败	添加告警设置失败	开发者
		25	手机号和内容个数不匹配	手机号和内容个数不匹配	开发者
		26	流量包错误	流量包错误	开发者
		27	未开通金额计费	未开通金额计费	开发者
		28	运营商错误	运营商错误	开发者
		29	超过频率	同一个手机号同一验证码模板每30秒只能发送一条。此规则用于防止验证码轰炸。 可在后台-系统设置了解详情及设置。	开发者
		-1	非法的apikey	apikey不正确或没有授权	开发者
		-2	API没有权限	用户没有对应的API权限	开发者
		-3	IP没有权限	访问IP不在白名单之内，可在后台"账户设置->IP白名单设置"里添加该IP	开发者
		-4	访问次数超限	调整访问频率或者申请更高的调用量	开发者
		-5	访问频率超限	短期内访问过于频繁，请降低访问频率	开发者
		-50	未知异常	系统出现未知的异常情况	技术支持 */
	}
	public function Post($curlPost,$url){
		$curl = curl_init();
		//curl_setopt($curl, CURLOPT_HTTPHEADER, array('Accept:text/plain;charset=utf-8', 'Content-Type:application/x-www-form-urlencoded','charset=utf-8'));
		curl_setopt($curl, CURLOPT_HEADER, false);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($curl, CURLOPT_TIMEOUT, 10);
		curl_setopt($curl, CURLOPT_POST, 1);
		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt ($curl, CURLOPT_URL, $url);
		curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($curlPost));
		$return_str = curl_exec($curl);
		curl_close($curl);
		return $return_str;
	}
	public function xml_to_array($xml){
		$reg = "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/";
		if(preg_match_all($reg, $xml, $matches)){
			$count = count($matches[0]);
			for($i = 0; $i < $count; $i++){
				$subxml= $matches[2][$i];
				$key = $matches[1][$i];
				if(preg_match( $reg, $subxml )){
					$arr[$key] = self::xml_to_array( $subxml );
				}else{
					$arr[$key] = $subxml;
				}
			}
		}
		return $arr;
	}
}